import java.util.LinkedList;

/*
    java.util.LinkedList集合  Implements list 接口
*   linkedlist特点：
*       1、是一个链表的结构、查询慢、增删快
*       2、包含了大量操作首尾元素的方法
*   注意：使用linkedlist的特有方法，不能使用多态
*
    常见方法：
    public void addFirst(E e):将指定元素插入此列表的开头。
*   public void addLast(E e):将指定元素添加到此列表的结尾。
*   public E getFirst():返回此列表的第一个元素。
*   public E getLast():返回此列表的最后一个元素。
*   public E removeFirst():移除并返回此列表的第一个元素。
*   public E removeLast():移除并返回此列表的最后一个元素。
*   public E pop():从此列表所表示的堆栈处弹出一个元素。
*   public void push(E e):将元素推入此列表所表示的堆栈。
*   public boolean isEmpty()：如果列表不包含元素，则返回true。
*/
public class LinkedList01 {
    public static void main(String[] args) {
        LinkedList<String> s = new LinkedList<>();
        s.add("a");
        s.add("b");
        s.add("c");
        s.add("d");
        System.out.println(s);

        //public void addFirst(E e):将指定元素插入此列表的开头。
        s.addFirst("hello");
        System.out.println(s);

        //public void addLast(E e):将指定元素添加到此列表的结尾。
        s.addLast("world");
        System.out.println(s);

        //public E getFirst():返回此列表的第一个元素。
        String first = s.getFirst();
        System.out.println(first);
        //public E getLast():返回此列表的最后一个元素。
        String last = s.getLast();
        System.out.println(last);

        //public E removeFirst():移除并返回此列表的第一个元素。
        String removeFirst = s.removeFirst();
        System.out.println("被移除的首元素是：" + removeFirst);
        //public E removeLast():移除并返回此列表的最后一个元素。
        String removeLast = s.removeLast();
        System.out.println("被移除的尾元素是：" + removeLast);
        System.out.println("删除后的Linkedlist是：" + s);

        //public E pop():从此列表所表示的堆栈处弹出一个元素。
        String pop = s.pop();
        System.out.println("pop弹出的元素是" + pop + "\t" + "剩下的元素是：" + s);
        //public void push(E e):将元素推入此列表所表示的堆栈。
        s.push("java");
        System.out.println("push进栈一个元素" + "\t" + "进栈后的元素是：" + s);

        //public boolean isEmpty()：如果列表不包含元素，则返回true。
        boolean empty = s.isEmpty();
        System.out.println("linkedlist是否为空：" + empty);

        //clear方法清空linkedlist
        s.clear();
        //当linkedlist为空时，获取元素报错     java.util.NoSuchElementException
        //s.getFirst();
        //可以增加判断
        if (s.isEmpty()==false){
            System.out.println(s.getFirst());
        }
    }

}
